// package com.hlkj.pay.app.merchant.ext.impl.yytpay.constant;
//
//
// /*
//  * Hlpay-Plus aggregate payment system.
//  * Copyright (c) 2024-2025 Hlpay Team Copyright has the right of final interpretation.
//  */
//
// import java.io.DataInputStream;
// import java.io.InputStream;
// import java.io.UnsupportedEncodingException;
// import java.util.Map;
//
// import com.yst.m2.sdk.util.ThreeDES;
//
// import lombok.extern.slf4j.Slf4j;
//
// @Slf4j
// public class TransUtil {
//     private String charset = "UTF-8";
//     private String DESKey;
//
//     public TransUtil() {
//     }
//
//     public boolean unpacket(InputStream inputStream, Map<String, String> map) {
//         boolean result = true;
//
//         try {
//             if (inputStream == null) {
//                 log.error("解包信息为空");
//                 return false;
//             }
//
//             DataInputStream is = new DataInputStream(inputStream);
//             String merchno = null;
//             String dsorderid = null;
//             byte[] lenByte = new byte[8];
//             is.read(lenByte);
//             int dataLen = Integer.valueOf(new String(lenByte));
//             byte[] dataByte = new byte[dataLen];
//             is.readFully(dataByte, 0, dataLen);
//             byte[] merchnoByte = new byte[32];
//             System.arraycopy(dataByte, 0, merchnoByte, 0, 32);
//             merchno = (new String(merchnoByte)).trim();
//             byte[] termnoByte = new byte[32];
//             System.arraycopy(dataByte, 32, termnoByte, 0, 32);
//             String termno = (new String(termnoByte)).trim();
//             byte[] dsorderidByte = new byte[32];
//             System.arraycopy(dataByte, 64, dsorderidByte, 0, 32);
//             dsorderid = (new String(dsorderidByte)).trim();
//             byte[] transcodeByte = new byte[3];
//             System.arraycopy(dataByte, 96, transcodeByte, 0, 3);
//             String transcode = (new String(transcodeByte)).trim();
//             map.put("merchno", merchno);
//             map.put("termno", termno);
//             map.put("transcode", transcode);
//             map.put("dsorderid", dsorderid);
//             if (this.DESKey == null || "".equals(this.DESKey) || this.DESKey.length() != 24) {
//                 log.error("密钥不正确，密钥为：" + this.DESKey);
//                 return false;
//             }
//
//             byte[] DESKeyByte = this.DESKey.getBytes();
//             byte[] signLenByte = new byte[4];
//             System.arraycopy(dataByte, 99, signLenByte, 0, 4);
//             int signLen = Integer.valueOf(new String(signLenByte));
//             byte[] signByte = new byte[signLen];
//             System.arraycopy(dataByte, 103, signByte, 0, signLen);
//             String sign = new String(signByte);
//             StringBuffer sb = new StringBuffer();
//             sb.append(merchno).append("+").append(termno).append("+").append(dsorderid);
//             String signTemp = ThreeDES.getBlackData(DESKeyByte, sb.toString().getBytes(this.charset));
//             if (!sign.equals(signTemp)) {
//                 log.error("签名验签不匹配，签名串：" + sb.toString().getBytes(this.charset));
//                 return false;
//             }
//
//             byte[] jsonData = new byte[dataLen - 103 - signLen];
//             System.arraycopy(dataByte, 103 + signLen, jsonData, 0, dataLen - 103 - signLen);
//             String jsonString = ThreeDES.getWhiteData(DESKeyByte, new String(jsonData), this.charset);
//             map.put("data", jsonString);
//         } catch (Exception e) {
//             log.error("解包异常", e);
//             result = false;
//         }
//
//         return result;
//     }
//
//     public byte[] packet(Map<String, String> map) {
//         try {
//             if (this.DESKey != null && !"".equals(this.DESKey) && this.DESKey.length() == 24) {
//                 String merchno = (String)map.get("merchno");
//                 if (merchno != null && !"".equals(merchno.trim())) {
//                     String termno = (String)map.get("termno");
//                     if (termno != null && !"".equals(termno.trim())) {
//                         String transcode = (String)map.get("transcode");
//                         if (transcode != null && !"".equals(transcode.trim())) {
//                             String dsorderid = (String)map.get("dsorderid");
//                             if (dsorderid != null && !"".equals(dsorderid.trim())) {
//                                 String data = (String)map.get("data");
//                                 if (data != null && !"".equals(data.trim())) {
//                                     byte[] DESKeyByte = this.DESKey.getBytes();
//                                     String blackData = ThreeDES.getBlackData(DESKeyByte, data.getBytes(this.charset));
//                                     byte[] dataByte = blackData.getBytes();
//                                     StringBuffer sb = new StringBuffer();
//                                     sb.append(merchno).append("+").append(termno).append("+").append(dsorderid);
//                                     String sign = ThreeDES.getBlackData(DESKeyByte, sb.toString().getBytes(this.charset));
//                                     byte[] signByte = sign.getBytes();
//                                     int dataLen = dataByte.length + 103 + signByte.length;
//                                     byte[] lenByte = this.dataLenFormat(dataLen, 8);
//                                     byte[] signLenByte = this.dataLenFormat(signByte.length, 4);
//                                     byte[] response = new byte[dataLen + 8];
//                                     System.arraycopy(lenByte, 0, response, 0, 8);
//                                     System.arraycopy(this.dataLenFormat(merchno, 32, " "), 0, response, 8, 32);
//                                     System.arraycopy(this.dataLenFormat(termno, 32, " "), 0, response, 40, 32);
//                                     System.arraycopy(this.dataLenFormat(dsorderid, 32, " "), 0, response, 72, 32);
//                                     System.arraycopy(this.dataLenFormat(transcode, 3, " "), 0, response, 104, 3);
//                                     System.arraycopy(signLenByte, 0, response, 107, 4);
//                                     System.arraycopy(signByte, 0, response, 111, signByte.length);
//                                     System.arraycopy(dataByte, 0, response, signByte.length + 111, dataByte.length);
//                                     return response;
//                                 } else {
//                                     log.error("请求参数信息不能为空");
//                                     return null;
//                                 }
//                             } else {
//                                 log.error("商户订单号不能为空");
//                                 return null;
//                             }
//                         } else {
//                             log.error("交易类型不能为空");
//                             return null;
//                         }
//                     } else {
//                         log.error("终端号不能为空");
//                         return null;
//                     }
//                 } else {
//                     log.error("商户号不能为空");
//                     return null;
//                 }
//             } else {
//                 log.error("密钥不正确，密钥为：" + this.DESKey);
//                 return null;
//             }
//         } catch (Exception e) {
//             log.error("打包异常", e);
//             return null;
//         }
//     }
//
//     public byte[] dataLenFormat(int i, int len) throws UnsupportedEncodingException {
//         StringBuffer sb = new StringBuffer();
//         sb.append(i);
//
//         while(sb.length() < len) {
//             sb.insert(0, "0");
//         }
//
//         return sb.toString().getBytes();
//     }
//
//     public byte[] dataLenFormat(String s, int len, String sub) throws UnsupportedEncodingException {
//         if (s != null && !"".equals(s) && s.length() >= len) {
//             if (s.length() > len) {
//                 s = s.substring(0, len);
//                 return s.getBytes();
//             } else {
//                 return s.getBytes();
//             }
//         } else {
//             if (s == null) {
//                 s = "";
//             }
//
//             StringBuffer sb = new StringBuffer();
//             sb.append(s);
//
//             while(sb.length() < len) {
//                 sb.insert(0, sub);
//             }
//
//             return sb.toString().getBytes();
//         }
//     }
//
//     public String getCharset() {
//         return this.charset;
//     }
//
//     public void setCharset(String charset) {
//         this.charset = charset;
//     }
//
//     public String getDESKey() {
//         return this.DESKey;
//     }
//
//     public void setDESKey(String dESKey) {
//         this.DESKey = dESKey;
//     }
// }